﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Application.Creation.Simple_Factory
{
	public enum TypePizza{ Fromage, Chorizo };

	public class Pizzeria
	{
		private SimpleFabriquePizzeria _oFabrique;

		public Pizzeria( SimpleFabriquePizzeria oFabrique)
		{
			this._oFabrique = oFabrique;
		}

		public Pizza CommanderPizza(TypePizza enType)
		{
			Pizza oPizza = _oFabrique.CreerPizza( enType );

			oPizza.Preparer();
			oPizza.Cuire();
			oPizza.Couper();
			oPizza.Emballer();

			return oPizza;
		}
	}

	public class SimpleFabriquePizzeria
	{
		public Pizza CreerPizza(TypePizza enType)
		{
			Pizza oPizza = null;
			switch (enType)
			{
				case TypePizza.Fromage:
					oPizza = new PizzaFromage();
					break;
				case TypePizza.Chorizo:
					oPizza = new PizzaChorizo();
					break;
				default:
					break;
			}
			
			return oPizza;
		}
	}

	public interface Pizza
	{
		void Preparer();
		void Cuire();
		void Couper();
		void Emballer();

	}

	public class PizzaFromage : Pizza
	{
		public void Preparer()
		{
			Console.WriteLine("Préparation de la pizza avec du fromage");
		}

		public void Cuire()
		{
			Console.WriteLine("Cuisson de la pizza");
		}

		public void Couper()
		{
			Console.WriteLine("Découpage de la pizza");
		}

		public void Emballer()
		{
			Console.WriteLine("Emballage de la pizza");
		}
	}

	public class PizzaChorizo : Pizza
	{
		public void Preparer()
		{
			Console.WriteLine("Préparation de la pizza avec des chorizos	");
		}

		public void Cuire()
		{
			Console.WriteLine("Cuisson de la pizza");
		}

		public void Couper()
		{
			Console.WriteLine("Découpage de la pizza");
		}

		public void Emballer()
		{
			Console.WriteLine("Emballage de la pizza");
		}
	}
}
